package com.ww.springboot.boot.java8.completablefuture;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * thenCompose 返回值为一个CompletableFuture
 * thenCompose方法会在某个任务执行完成后，将该任务的执行结果,作为方法入参,去执行指定的方法。该方法会返回一个新的CompletableFuture实例
 *
 * 默认线程池的注意点
 * CompletableFuture代码中又使用了默认的线程池，处理的线程个数是电脑CPU核数-1
 *
 * @author 🧑 ‍wanwei
 * @since 2022-01-20 15:21
 */
public class CompletableFutureDemo7 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<String> f = CompletableFuture.completedFuture("第一个任务");
        //第二个异步任务
        CompletableFuture<String> future = CompletableFuture
                .supplyAsync(() -> "第二个任务")
                .thenComposeAsync(data -> {
                    System.out.println(data);
                    return f; //使用第一个任务作为返回
                });
        System.out.println(future.join());
    }
}
